// 认证检查脚本 - 必须在所有其他脚本之前执行
(function() {
    'use strict';
    // 检查是否为认证相关页面
    const currentPath = window.location.pathname;
    const authPages = ['/login.html', '/clear-login.html', '/清除登录状态.html', '/test-auth.html', '/admin.html'];
    const isAuthPage = authPages.some(page => currentPath.endsWith(page));
    
    if (isAuthPage) {
        return;
    }
    
    // 从服务器获取认证配置
    async function fetchAuthConfig() {
        try {
            // 从后端专门的认证配置接口获取
            const response = await fetch('/api/auth/config');
            if (!response.ok) {
                throw new Error(`HTTP ${response.status}`);
            }
            
            const result = await response.json();
            if (result.success && result.data) {
                return result.data;
            }
            
            throw new Error('认证配置获取失败');
        } catch (error) {
            console.error('❌ 从后端 API 获取认证配置失败:', error.message);
            // 不再提供默认值，返回 null
            return null;
        }
    }
    
    // 认证检查函数
    async function checkAuth() {
        try {
            // 1. 从服务器获取最新的认证配置
            const authConfig = await fetchAuthConfig();
            const authEnabled = authConfig.enabled !== false;
            // 2. 如果认证被禁用，允许访问
            if (!authEnabled) {
                return true;
            }
            
            // 3. 检查登录状态
            const isLoggedIn = localStorage.getItem('isLoggedIn');
            const loginTime = localStorage.getItem('loginTime');
            const sessionTimeout = parseInt(localStorage.getItem('sessionTimeout')) || 24;
            // 4. 如果未登录，跳转到登录页
            if (isLoggedIn !== 'true' || !loginTime) {
                redirectToLogin();
                return false;
            }
            
            // 5. 检查会话是否过期
            const loginDate = new Date(loginTime);
            const now = new Date();
            const hoursDiff = (now - loginDate) / (1000 * 60 * 60);
            if (hoursDiff >= sessionTimeout) {
                clearLoginState();
                redirectToLogin();
                return false;
            }
            return true;
            
        } catch (error) {
            console.error('❌ 认证检查过程中发生错误:', error);
            // 发生错误时，为了安全起见，要求登录
            redirectToLogin();
            return false;
        }
    }
    
    // 跳转到登录页
    function redirectToLogin() {
        // 防止无限重定向
        if (window.location.pathname.endsWith('/login.html')) {
            return;
        }
        
        // 保存当前页面，登录后可以返回
        const currentUrl = window.location.href;
        if (!currentUrl.includes('login.html')) {
            sessionStorage.setItem('returnUrl', currentUrl);
        }
        
        window.location.href = 'login.html';
    }
    
    // 清除登录状态
    function clearLoginState() {
        localStorage.removeItem('isLoggedIn');
        localStorage.removeItem('username');
        localStorage.removeItem('loginTime');
        localStorage.removeItem('sessionTimeout');
    }
    
    // 定期检查会话状态（每5分钟）
    function startSessionMonitor() {
        setInterval(async () => {
            // 重新检查认证配置
            const authConfig = await fetchAuthConfig();
            if (!authConfig.enabled) {
                return;
            }
            
            const isLoggedIn = localStorage.getItem('isLoggedIn');
            const loginTime = localStorage.getItem('loginTime');
            const sessionTimeout = parseInt(localStorage.getItem('sessionTimeout')) || 24;
            
            if (isLoggedIn === 'true' && loginTime) {
                const loginDate = new Date(loginTime);
                const now = new Date();
                const hoursDiff = (now - loginDate) / (1000 * 60 * 60);
                
                if (hoursDiff >= sessionTimeout) {
                    clearLoginState();
                    redirectToLogin();
                }
            }
        }, 5 * 60 * 1000); // 5分钟
    }
    
    // 立即执行认证检查（异步）
    (async function initAuth() {
        const authPassed = await checkAuth();
        
        // 如果认证通过，启动会话监控
        if (authPassed) {
            startSessionMonitor();
        }
    })();
})();
